{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "861967af-edc6-47be-8a2f-f66c6c5ebbc1",
   "metadata": {},
   "source": [
    "# Tutorial for interpretable scRNA-seq cell type annotation using six heterogeneous pancreas datasets\n",
    "We demonstrate scHash cell type annotation using six human pancreas scRNA-seq datasets generated using five different technologies, [Wang (Fluidigm C1)](https://doi.org/10.2337/db16-0405), [Segerstolpe (SMART-Seq2)](https://doi.org/10.1016/j.cmet.2016.08.020), [Baron (inDrops)](https://doi.org/10.1016/j.cels.2016.08.011), [Muraro (Celseq)](https://doi.org/10.1016/j.cels.2016.09.002), [Muraro (Celseq2)](https://doi.org/10.1016/j.cels.2016.09.002), and [Lawlor (Fluidigm C1)](https://genome.cshlp.org/content/27/2/208.long).",
    "\n",
    "The raw data for first five datasets was downloaded from [Harmony](https://github.com/immunogenomics/harmony2019/tree/master/data/figure5).",
    "\n",
    "The Lawlor (Fluidigm C1) dataset was downloaded at [GSE83139](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE83139).\n",
    "\n",
    "We compiled the six datasets into an AnnData object, and the processed data can be downloaded [here](https://drive.google.com/file/d/1shc4OYIbq2FwbyGUaYuzizuvzW-giSTs/view?usp=share_link)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "bf0022a3-6769-4a28-a163-d5408344b23d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import scHash\n",
    "import anndata as ad\n",
    "\n",
    "from sklearn.metrics import f1_score, precision_score, recall_score\n",
    "from statistics import median"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67da14ca-0fb5-4b5d-8599-1cd4384044cb",
   "metadata": {},
   "source": [
    "## Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "bf3f0bd2-3658-44d7-8ea4-c0e13e5309ee",
   "metadata": {},
   "outputs": [],
   "source": [
    "# define data path\n",
    "data_dir = '../../../../share_data/Pancreas_Wang/fivepancreas_wang_raw.h5ad'\n",
    "\n",
    "# set up datamodule\n",
    "# This anndata object is packed with 6 pancreas dataset. We take one of them to be the test dataset here.  \n",
    "query = 'indrop'\n",
    "full = ad.read_h5ad(data_dir)\n",
    "\n",
    "train = full[full.obs.dataset!=query]\n",
    "test = full[full.obs.dataset==query]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b6cb2c4-7d29-4d06-ad8e-4ed36e2829d2",
   "metadata": {},
   "source": [
    "## Training Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85ade212-ca91-43c7-8182-9c4cbf248e58",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# set up the training datamodule\n",
    "datamodule = scHash.setup_training_data(train_data = train,cell_type_key = 'cell_type', batch_key = 'dataset')\n",
    "\n",
    "# set a directory to save the model \n",
    "checkpointPath = '../checkpoint/'\n",
    "\n",
    "# initiliza scHash model and train \n",
    "model = scHash.scHashModel(datamodule)\n",
    "trainer, best_model_path, training_time = scHash.training(model = model, datamodule = datamodule, checkpointPath = checkpointPath, max_epochs = 50)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4b826ab-1ffb-494e-8037-9a02a6407e3d",
   "metadata": {},
   "source": [
    "## Test Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "fdecaada-8e97-46b5-94c9-6807c734061f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "F1 Median: 0.965\n"
     ]
    }
   ],
   "source": [
    "# add the test data\n",
    "datamodule.setup_test_data(test)\n",
    "\n",
    "# test the model\n",
    "pred_labels, hash_codes = scHash.testing(trainer, model, best_model_path)\n",
    "\n",
    "# show the test performance\n",
    "labels_true = test.obs.cell_type\n",
    "f1_median = round(median(f1_score(labels_true,pred_labels,average=None)),3)\n",
    "\n",
    "print(f'F1 Median: {f1_median}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c26758c-14fe-46ef-aab6-218ed7c15065",
   "metadata": {},
   "source": [
    "# Interpretability"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "964d59f2-2b2a-4724-844d-28104610ab55",
   "metadata": {},
   "source": [
    "The package offers interpretability analysis of each query cell. The `compute_cell_composition` function takes `trainer`, `best_model_path`, `model` as input and will analyze the closest K cell compositions (e.g., dataset, cell type) for user. The `plot_component` function will further help users visulize the compositions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8eff27f5-cd7a-4b55-be73-dafd1ed91e11",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_celltype, df_batch = scHash.compute_cell_composition(trainer, best_model_path, model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d89925c3-5b5f-4bd0-853b-2d0981727c4d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "scHash.plot_component(df_celltype, df_batch,trainer,nth_query=100)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020, 12:45:15) \n[Clang 6.0 (clang-600.0.57)]"
  },
  "vscode": {
   "interpreter": {
    "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49"
   }
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {},
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
